package com.app.mapper;

import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

public interface HuibenHomeworkUserMapper {
    /**
     * 统计每个作业的完成人数
     * @param homeworkIds 作业ID列表
     * @param classId 班级ID
     * @return 每个作业的完成人数
     */
    @MapKey("homework_id")
    List<Map<String, Object>> countFinishedByHomeworkIdsAndClassId(@Param("homeworkIds") List<Long> homeworkIds, @Param("classId") Long classId);

    /**
     * 查询作业的完成统计信息
     * @param homeworkId 作业ID
     * @param classId 班级ID
     * @return 统计信息
     */
    Map<String, Object> getHomeworkStats(@Param("homeworkId") Long homeworkId, @Param("classId") Long classId);

    /**
     * 查询已完成用户列表
     * @param homeworkId 作业ID
     * @param classId 班级ID
     * @return 已完成用户列表
     */
    List<Map<String, Object>> getCompletedUsers(@Param("homeworkId") Long homeworkId, @Param("classId") Long classId);

    /**
     * 查询未完成用户列表
     * @param homeworkId 作业ID
     * @param classId 班级ID
     * @return 未完成用户列表
     */
    List<Map<String, Object>> getUncompletedUsers(@Param("homeworkId") Long homeworkId, @Param("classId") Long classId);

    /**
     * 插入作业用户关联记录
     * @param homeworkId 作业ID
     * @param userId 用户ID
     * @param classId 班级ID
     * @param finished 完成状态
     */
    void insertHomeworkUser(@Param("homeworkId") Long homeworkId, 
                           @Param("userId") Long userId, 
                           @Param("classId") Long classId, 
                           @Param("finished") Integer finished);

    /**
     * 批量插入作业用户关联记录
     * @param homeworkIds 作业ID列表
     * @param userId 用户ID
     * @param classId 班级ID
     * @param finished 完成状态
     */
    void batchInsertHomeworkUser(@Param("homeworkIds") List<Long> homeworkIds, 
                                @Param("userId") Long userId, 
                                @Param("classId") Long classId, 
                                @Param("finished") Integer finished);
}